package com.zq.多线程设计模式.单线程模式;

/**
 * @author Jiu
 * @description：
 * 多线程访问资源的时候，被synchronized同步的方法总是排他性的。
 * 多个线程对某个类的状态发生改变的时候，比如FlightSecurity的登机牌以及身份证。
 * @date 2021/04/07   14:33
 **/
public class FlightSecurity {

    private int count = 0;// 已过安检的人数
    private String boardingPass = "null";// 登机牌
    private String idCard = "null";// 身份证


    // 关键是  synchronized   有这个关键字不会错乱
    public void pass(String boardingPass, String idCard) {
        this.boardingPass = boardingPass;
        this.idCard = idCard;
        this.count++;
        check();
    }

    private void check() {
        System.out.println(count + "安检通过");
        // 简单的业务，当登机牌和身份证首位不相同时则表示检查不通过
        if (boardingPass.charAt(0) != idCard.charAt(0)){
            throw new RuntimeException("-----Exception-----" + toString());
        }
    }

    @Override
    public String toString() {
        return "FlightSecurity{" +
                "count=" + count +
                ", boardingPass='" + boardingPass + '\'' +
                ", idCard='" + idCard + '\'' +
                '}';
    }
}
